<template>
  <el-col
    ref="container"
    v-loading="dataLoading"
    style="width: 100%; height: 100%"
  >
    <span>{{ table.name }}</span>
    <ux-grid
      id="dsData"
      ref="plxTable"
      size="mini"
      style="width: 100%"
      :height="height"
      :checkbox-config="{ highlight: true }"
      :width-resize="true"
    >
      <ux-table-column
        v-for="field in fields"
        :key="field.dataeaseName"
        min-width="200px"
        :field="field.dataeaseName"
        :resizable="true"
      >
        <template slot="header">
          <svg-icon
            v-if="field.deType === 0"
            icon-class="field_text"
            class="field-icon-text"
          />
          <svg-icon
            v-if="field.deType === 1"
            icon-class="field_time"
            class="field-icon-time"
          />
          <svg-icon
            v-if="field.deType === 2 || field.deType === 3"
            icon-class="field_value"
            class="field-icon-value"
          />
          <svg-icon
            v-if="field.deType === 5"
            icon-class="field_location"
            class="field-icon-location"
          />
          <span>{{ field.name }}</span>
        </template>
      </ux-table-column>
    </ux-grid>
    <span
      v-if="table.name"
      style="font-size: 12px"
    >{{
      $t('chart.preview_100_data')
    }}</span>
  </el-col>
</template>

<script>
import { post } from '@/api/dataset/dataset'

export default {
  name: 'DatasetTableData',
  props: {
    table: {
      type: Object,
      required: true
    }
  },
  data() {
    return {
      fields: [],
      data: [],
      height: 'auto',
      dataLoading: false
    }
  },
  watch: {
    table() {
      this.initData()
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.height =
        document.getElementById('dsData').parentNode.offsetHeight - 16 - 14 - 5
      this.initData()
    })
  },
  methods: {
    initData() {
      this.resetData()
      if (this.table.id) {
        this.dataLoading = true
        this.table.row = 100
        post('/dataset/table/getPreviewData/1/100', this.table, false, 30000)
          .then((response) => {
            this.fields = response.data.fields
            this.data = response.data.data
            const data = this.data
            if (response.data.status === 'warnning') {
              this.$warning(response.data.msg, 3000)
            }
            if (response.data.status === 'error') {
              this.$error(response.data.msg, 3000)
            }
            this.$refs.plxTable.reloadData(data)
            this.dataLoading = false
          })
          .catch((res) => {
            this.dataLoading = false
          })
      }
    },

    resetData() {
      this.fields = []
      this.data = []
    }
  }
}
</script>

<style scoped>
</style>
